Skip to content

fix(assistant): 没有 MEMORY.md 时人格提示词保存被静默拒绝 - #2

Open
bqj6666 wants to merge 1 commit into
Sam-Fic:mainfrom
bqj6666:fix/assistant-prompt-save-silent-return
Open

bqj6666 wants to merge 1 commit into
Sam-Fic:mainfrom
bqj6666:fix/assistant-prompt-save-silent-return

Conversation

@bqj6666

@bqj6666 bqj6666 commented Nov 14, 2026

Copy link
Copy Markdown

save() 首行的 memoryRevision.isBlank() 在没有记忆文件时恒为真:snapshot() 返回 null, revision 落成空串,于是保存流程连取锁都没走到 —— 既无 toast 也无日志,表现为 「助手编辑页改完提示词点保存,按钮可点但毫无反应,退出重进内容丢失」。

根因

fun save() {
if (!dirty || saving || memoryOverLimit || memoryRevision.isBlank()) return

memoryRevision 只在 LaunchedEffect 里由 AgentMemoryRepository.snapshot(assistantId) 赋值。
没有 MEMORY.md 时 snapshot() 返回 null,runCatching 吞掉后 revision 落成空串 → 保存流程
在第一行就 return,连存储层的锁都没走到。人格提示词存在 eta-assistants/index.json,
与 MEMORY.md 是两套存储,不该被记忆 revision 锁死。

改动

  • 门禁只保留 dirty / saving / 记忆超限
  • 记忆未改动时不触碰记忆存储
  • 记忆改动但 revision 为空时走 replaceAll(content) 的无并发校验写入
  • save 入口/成功/失败各补一条日志,失败不再静默

验证

  • compileDebugKotlin / assembleRelease 通过
  • 删除 MEMORY.md 后改提示词点保存 → 正常返回,重进内容保留,
    日志可见 assistant-save start/ok
  • 回归:记忆有改动时仍按 revision 校验,冲突仍抛 MEMORY_CONFLICT;超限仍拦截

save() 首行的 memoryRevision.isBlank() 在没有记忆文件时恒为真:snapshot() 返回 null,
revision 落成空串,于是保存流程连取锁都没走到 —— 既无 toast 也无日志,真机表现就是
「助手编辑页改完提示词点保存,按钮可点但毫无反应,退出重进内容丢失」。

人格提示词存在 index.json,与 MEMORY.md 无关,不该被记忆 revision 锁死:
- 门禁只保留 dirty / saving / 记忆超限三条
- 记忆未改动时不触碰记忆存储
- 记忆改动但 revision 为空时走 replaceAll(content) 无并发校验写入
- save 入口 / 成功 / 失败各补一条日志,失败不再静默
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant